package com.joey.cloud.communal.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 使用BigDecimalUtil处理加减乘除
 * @author joey
 */
public class BigDecimalUtil {
    private BigDecimalUtil() {

    }

    /**
     *  加法
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(double2String(v1));
        BigDecimal b2 = new BigDecimal(double2String(v2));
        return b1.add(b2);
    }

    /**
     * 减法
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal sub(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(double2String(v1));
        BigDecimal b2 = new BigDecimal(double2String(v2));
        return b1.subtract(b2);
    }

    /**
     * 乘法
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal mul(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(double2String(v1));
        BigDecimal b2 = new BigDecimal(double2String(v2));
        return b1.multiply(b2);
    }

    /**
     * 除法
     * @param v1
     * @param v2
     * @return
     */
    public static BigDecimal div(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(double2String(v1));
        BigDecimal b2 = new BigDecimal(double2String(v2));
        // 2 = 保留小数点后两位   ROUND_HALF_UP = 四舍五入
        return b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 保留几位小数点 四舍五入
     * @param value 传入的double类型的值
     * @param index 保留几位小数点
     * @return String 类型
     */
    public static String format2TheDecimal(double value, int index) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(index, RoundingMode.HALF_UP);
        return bd.toString();
    }

    private static String double2String(double value){
        String result = Double.toString(value);
        return result;
    }

    /**
     * 保留2位小数点
     * @param value
     * @return
     */
    public static double keep2DecimalPlaces(double value){
        double doubleValue = 0;
        if (value != 0){
            BigDecimal bg = new BigDecimal(value);
            doubleValue = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        return doubleValue;

    }

    public static void main(String[] args) {
        double f =  keep2DecimalPlaces(6.23456);
        System.out.println(f);
    }
}
